/**
 * 与数据表格操作有关的js库
 * 
 * @author Matrix-J
 * @date 2015-11-18
 */
var EXGridTools = function() {

	"use strict";// 严格模式

	/** 用用于存储exGrid 对象，以方便工具类调用表格的行为 */
	var tableMap = {};

	return {

		/** 添加一个exGrid */
		addTable : function(exGrid) {
			tableMap[exGrid.tableAttr.tId] = exGrid;
		},
		/** 获取一个exGrid */
		getTable : function(tId) {
			return tableMap[tId];
		},

		/**
		 * 把表格中被选中的条目值全部发送到服务器，并打印出返回结果 --> flag 为-1 为批量 本方法适用用于各种批量操作 删除，改变状态等
		 * flag ！=-1 为单条操作，flag表示id
		 */
		handleItems : function(tableId, url, flag) {
			if (flag == -1) {
				var nodes = $("#" + tableId + " tbody input[type='checkbox']:checked");
				var ids = "";
			
				nodes.each(function(i) {
					ids += nodes.eq(i).attr('value') + ","
				});
				if (nodes.length == 0) {
					layer.msg("请先选择您要操作的数据");
					return;
				} else {
					layer.confirm("确定要对这 " + nodes.length + " 条数据进行该项操作吗？", function() {
						ids = ids.substring(0, ids.lastIndexOf(","));
						$.AjaxProxy({
							p : { keys : ids }
						}).invoke(url, function(loj) {
							layer.alert(loj.getValue("info"), 1);
							tableMap[tableId].loaDData();
						});
					});
				}
			} else {
				// 单条删除
				layer.confirm("确定要对这一条数据进行该项操作吗？", function() {
					$.AjaxProxy({
						p :{ keys : flag }
					}).invoke(url, function(loj) {
						layer.alert(loj.getValue("info"), 9);
						tableMap[tableId].loaDData();
					});
				});
			}
		},
		/** 删除一个table 中选中的tr */
		deltr : function(table, callback) {
			var index = layer.confirm("确定要删除选中项吗？", function() {
				var nodes = $(table + " tbody input[type='checkbox']:checked");
				// 删除之前调用一下【删除之后调用没有意义】
				if (callback) {
					callback(nodes);
				}
				nodes.each(function(i) {
					if (this.checked) {
						$(this).closest("tr").remove();
					}
				});
				layer.close(index);
			});
		},
		/** 获取指定容器中的checkbox值以,分开 */
		getCheckboxValue : function(table) {
			var nodes = $(table + " tbody input[type='checkbox']:checked");
			var ids = "";
			if (nodes.length > 0) {
				nodes.each(function(i) {
					ids += nodes.eq(i).attr('value') + ","
				});
				return ids.substring(0, ids.lastIndexOf(","));
			} else {
				return "";
			}
		},

		/** 分页组件 */
		paging : function(exGrid) {

			var rowCount = exGrid.tableAttr.rowCount;
			var pageCount = parseInt(exGrid.tableAttr.pageCount);
			var pageNow = exGrid.tableAttr.pageNow;
			var tId = exGrid.tableAttr.tId;

			var html = '<span><span>共 ' + rowCount + ' 条记录 </span> &nbsp&nbsp共'
					+ pageCount + '页/当前第' + pageNow + '页</span>&nbsp&nbsp';
			if (pageNow == 1) {
				html += '<a class="btn btn-primary size-S mr-5" onclick="javascript:void(0)" >上一页</a>';
			} else {
				html += '<a class="btn btn-primary size-S mr-5"  onclick="EXGridTools.changePage(\''
						+ tId + '\',' + (pageNow - 1) + ')"  >上一页</a>';
			}
			var begin = 0;
			var end = 0;

			if (pageCount <= 6) {
				begin = 1;
				end = pageCount;
			} else {
				begin = pageNow - 2;
				end = pageNow + 3;
				if (begin < 1) {
					begin = 1;
					end = 6;
				}
				if (end > pageCount) {
					begin = pageCount - 5;
					end = pageCount;
				}
			}
			if (pageNow > 3) {
				html += '<a class="btn btn-default size-S mr-5" onclick="EXGridTools.changePage(\''
						+ tId + '\',' + 1 + ')" >首页</a>';
			}
			for (var i = begin; i <= end; i++) {

				if (pageNow == i) {
					html += '<a class="btn btn-p+-+rimary size-S mr-5" onclick="javascript:void(0)" >'
							+ i + '</a>';
				} else {
					html += '<a class="btn btn-default size-S mr-5" onclick="EXGridTools.changePage(\''
							+ tId + '\',' + i + ')">' + i + '</a>';
				}
			}
			if (end < pageCount) {
				html += '<a class="btn btn-default size-S mr-5" onclick="EXGridTools.changePage(\''
						+ tId + '\',' + pageCount + ')">尾页</a>';
			}

			if (pageNow == pageCount) {
				html += '<a class="btn btn-primary size-S mr-5"  onclick="javascript:void(0)">下一页</a>';
			} else {

				html += '<a class="btn btn-primary size-S mr-5" onclick="EXGridTools.changePage(\''
						+ tId + '\',' + (pageNow + 1) + ')" >下一页</a>';
			}
			exGrid.jtable.find(".pagingBox").empty().html(html);
		},
		/** 改变pageNow */
		changePage : function(tId, pageNow) {
			tableMap[tId].tableAttr.pageNow = pageNow;
			tableMap[tId].serchData(tId);
		},
		/** 改变pageSize */
		changeSize : function(tId, select) {
			tableMap[tId].tableAttr.pageSize = select.value;
			tableMap[tId].tableAttr.pageNow = 1;
			tableMap[tId].serchData(tId);
		},

		/**
		 * 为表格加上显示明细的功能 根据 .showTableDetail 查找 参数：node事件源
		 */
		initShowDetail : function(callback) {
			$(".showTableDetail")
					.each(
							function() {
								var node = $(this);
								node.css({
									cursor : "pointer",
									fontSize : "16px",
									color : "#5a98de"
								});
								node.attr("class",
										"fa fa-plus-circle showTableDetail");
								node
										.on(
												'click',
												function() {
													if (node
															.hasClass('fa-plus-circle')) {// 展开
														node
																.attr("class",
																		"fa fa-minus-circle showTableDetail");
														if (node.closest("tr")
																.next("tr")
																.css("display") == "none") {
															node
																	.closest(
																			"tr")
																	.next("tr")
																	.slideDown();
														} else {
															node
																	.closest(
																			"tr")
																	.after(
																			"<tr style='display:none' ><td class='pd-20' colspan='200'><table>"
																					+ callback(node)
																					+ "</table></td></tr>")
															node
																	.closest(
																			"tr")
																	.next("tr")
																	.slideDown();
														}
													} else { // 隐藏
														node.closest("tr")
																.next("tr")
																.slideUp();
														node
																.attr("class",
																		"fa fa-plus-circle showTableDetail");
													}
												});
							});
		}
	}
}();

function EXGrid() {

	return {
		/** 初始化表格参数 */
		initGrid : function(initparam) {
			_this = this;
			_this.tableAttr = $.extend(_this.tableAttr, initparam);
			_this.jtable = $("#" + _this.tableAttr.tId);
			// 绑定serch按钮的serch方法
			EXGridTools.addTable(_this);
			_this.jtable.find(".EXSerchBtn").click(function() {
				_this.serchData(_this.tableAttr.tId);
			});
			return _this;
		},
		// 表格搜索搜索参数
		serchParame : {},
		// 最外层的表格对象
		jtable : {},
		tableData : {},
		tableAttr : {
			pageNow : 1,
			pageSize : 10,
			tId : "EXdataTable", // 默认表格id
			serchFormId : "serchForm", // 默认搜索表单id
			pageCount : 0,
			rowCount : 0,
			budinRow : null, // 构建行的函数
			afterBudin : null,// 在行数据加载之后执行的函数
			reflashSerchData : null, // 返回要传到服务器去的参数 注意次序
			dataUrl : "", // 数据加载的地址
			a : true,// 异步加载
			c : true
		// 是否开启遮罩
		},
		/** 调用 当前表格的搜索方法 */
		serchData : function(tId) {
			var exGrid = EXGridTools.getTable(tId);
			exGrid.serchParame['pageSize'] = exGrid.tableAttr.pageSize;
			exGrid.serchParame['pageNow'] = exGrid.tableAttr.pageNow;
			var serchData ={};
			if(exGrid.tableAttr.reflashSerchData){
				serchData = exGrid.tableAttr.reflashSerchData(); // 调外部传递进来的构建参数方法	
			}else{
				serchData=EXForm.toJson("#"+exGrid.tableAttr.serchFormId);
			}
			exGrid.serchParame = $.extend(exGrid.serchParame, serchData);
			exGrid.loaDData();
		},

		/** 加载表格数据 */
		loaDData : function() {
			var _this = this;
			// 第一次需要初始化搜索参数
			if (!_this.serchParame['pageSize']) {
				_this.serchData(_this.tableAttr.tId);
				return;
			}
			$.AjaxProxy({
				p : _this.serchParame,
				a : _this.tableAttr.a,
				c : _this.tableAttr.c
			}).invoke(_this.tableAttr.dataUrl, function(loj) {
				_this.tableData = loj.attr("result").dataList;
				// 加载数据
				var html=_this.tableAttr.budinRow(loj);
				if(html==""){
					html="<tr><td  colspan='100' ><div class='text-c f-20 c-primary'><i class='fa fa-hdd-o'></i> 没有数据</div></td></tr>"
				}
				_this.jtable.find("tbody").html(html);
				_this.tableAttr.pageCount = loj.getValue('pageCount');
				_this.tableAttr.rowCount = loj.getValue('totalRecold');
				// 加载分页
				EXGridTools.paging(_this);
				// 表格加载完后执行的函数
				if (_this.tableAttr.afterBudin) {
					_this.tableAttr.afterBudin();
				}
			});
		}

	}
}
